package main

import (
	"fmt"
	"unsafe"
)

type K struct {
}
type F struct {
	num1 K
	num2 int32
}

// int 和指针大小跟随系统字长
func main() {
	// i := int(0)
	// p := &i
	// fmt.Println(unsafe.Sizeof(int64(0)))
	// fmt.Println(unsafe.Sizeof(p))
	// a := K{}
	// b := int(0)
	// c := K{}
	// fmt.Println(unsafe.Sizeof(a))
	// fmt.Printf("%p\n", &a)
	// fmt.Printf("%p\n", &b)
	// fmt.Printf("%p\n", &c)

	// f := F{}
	// fmt.Printf("f.num2地址:%p\n", &f.num2)
	// fmt.Printf("f.num1地址:%p\n", &f.num1)
	// fmt.Printf("f地址:%p\n", &f)

}

func demo01() {
	m := map[string]struct{}{}
	m["A"] = struct{}{}

}

// 字符串本质是个结构体
// Data指针指向底层byte数组
// len表示字节数 不是字符数
func demo02() {
	fmt.Println(unsafe.Sizeof("慕课网"))
	fmt.Println(unsafe.Sizeof("慕课网老司机"))

}
func demo03() {
	s := "慕课网huran"
	// fmt.Println(unsafe.Pointer(&s))
	// sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
	// fmt.Println(sh.Len, sh.Data)
	// fmt.Println(len(s))
	for i := 0; i < len(s); i++ {
		fmt.Println("========>", s[i])
	}
	for _, v := range s {
		fmt.Printf("%c\n", v)
	}
}

// 字符串切分转为run数组，在切片 在转为string
func demo04() {
	s := "慕课网huran"
	s = string([]rune(s)[:3])
	fmt.Println(s)
}
